package ex.com.jm.food.utils;

import ex.com.jm.food.contants.Page;

public class PageUtil {

	 public static final String ASC = "asc";  
	    public static final String DESC = "desc";  
	    public static final String PAGE_DESC = "↓";  
	    public static final String PAGE_ASC = "↑";  
	    public static final String PAGE_NULL = "&nbsp;&nbsp;";    
	    public static final String SESSION_PAGE_KEY = "page";  
	      
	      
	    /** 
	     * @param querySql   查询SQL 
	     * @param beginIndex 开始下标 
	     * @param endinIndex 结束下标 
	     * @return 
	     */  
	    public static String getPageQuerySql(String querySql,Long beginIndex, Long endinIndex) {  
	        if(querySql.indexOf("where rn>") != -1 && querySql.indexOf("and rn<=") != -1){  
	            return querySql.toUpperCase();  
	        }  
	        return new java.lang.StringBuffer().append(querySql).append(" where rn>").append(beginIndex).append(" and rn<=").append(endinIndex).toString().toUpperCase();  
	    }     
	  
	    /** 
	     * @param querySql    查询SQL 
	     * @param orderByName 排序列名  
	     * @return 
	     */  
	    public static String createQuerySql(String querySql, String orderByName) {  
	        StringBuilder sql = new StringBuilder();  
	        sql.append("select ttt.* from(select tt.*,rownum rn from(");  
	        sql.append(querySql);  
	        if (org.apache.commons.lang3.StringUtils.isNotEmpty(orderByName)) {  
	            sql.append(" order by ").append(orderByName);  
	        }  
	        sql.append(" )tt)ttt ");  
	        return sql.toString();  
	    }  
	      
	    /** 
	     * 取得排序名称+desc or asc 
	     * @param querySql 查询SQL 
	     * @return 返回查询语句 SELECT ... FROM TABLE  ORDER BY ID DESC 中的 ID DESC 
	     */  
	    public static String getSortDescOrAsc(String querySql) {  
	        /**取得ordery by之前的查询字符串*/   
	        querySql = querySql.toUpperCase();  
	        String temp = "ORDER BY";                 
	        int orderIndex = querySql.lastIndexOf(temp);      
	        String newsql = querySql.substring(orderIndex);   
	        String temp2 = ")";       
	        int lastIndex = newsql.indexOf(temp2);    
	        String orderByName = newsql.substring(temp.length(),lastIndex).trim();  
	        return orderByName;  
	    }     
	      
	    /** 
	     * 初始化分页类 
	     * @param initPageSql  未分页的查询SQL 
	     * @param totalCount   总行数 
	     * @param index        分页状态 
	     * @param value        只有在设置每页显示多少条时,值不会NULL,其它为NULL 
	     */  
	    public  static Page inintPage(String initPageSql,Long totalCount,Integer index,String value,Page sessionPage){    
	        Page page = null;  
	        if(index < 0){  
	             page = new Page(totalCount);  
	        }else{  
	             /**每页显示多少条*/  
	             Long everPage = null == value ? 10 : Long.parseLong(value);  
	             /**获取Session中的分页类,方便保存页面分页状态*/  
	             page = sessionPage;               
	             page.setEveryPage(everPage);  
	             page.setTotalCount(totalCount);              
	        }         
	        page.setInitQuerySql(initPageSql);            
	        /**对查询SQL进行分页计算*/  
	        String querySql = getPageQuerySql(initPageSql,page.getBeginIndex(), page.getEndinIndex());  
	        /**真正传递到后台执行获取分页数据的sql*/  
	        page.setQuerySql(querySql);  
	        /**保存到Session中*/  
	        return page;          
	    }  
	      
	      
	  
	      
	    /** 
	     * 当页点击：首页,前一页,后一页,末页,排序,到第多少页时进行分页操作 
	     * @param index 分页状态 
	     * @param value 排序字段名或者到第多少页 
	     */  
	    public static Page execPage(int  index,String value,Page sessionPage){        
	          
	        Page page = sessionPage;      
	          
	        /**调用方法进行分页计算*/  
	        page.pageState(index,value);  
	        /**未进行分页前的sql*/  
	        String initPageSql = page.getInitQuerySql();  
	        /**进行分页SQL组合*/  
	        String  querySql = getPageQuerySql(initPageSql,page.getBeginIndex(), page.getEndinIndex());  
	          
	        /**替换排序列名*/  
	        if (page.isSort() == true) {              
	            String sortName = page.getSortName();  
	            if (null != sortName) {  
	                /**获取排序状态:值(desc or asc)*/  
	                String descAsc = page.getSortState();             
	                /**组合新的排序字段与状态*/  
	                String sortNameDescAsc = (" " + sortName + " " + descAsc).toUpperCase();  
	                /**返回之前的排序字段与状态*/  
	                String getOldSortName = PageUtil.getSortDescOrAsc(querySql);  
	                /**返回最新的排序字段与状态*/  
	                querySql = querySql.replace(getOldSortName,sortNameDescAsc);  
	            }  
	        }  
	        page.setQuerySql(querySql);  
	        return page;          
	    }  
}
